package com.dart.framework.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

import com.dart.framework.exception.LogException;

/**
 * 日志处理接口<br>
 * 实现该类完成日志入库操作或日志个性记录<br>
 * 
 * Spring AOP 声明式配置：
 * <pre>
 * 	&lt;!-- 切面类 --&gt;
 *	&lt;bean id="logAspect" class="com.dart.framework.aop.LogAspect"&gt;
 *		&lt;property name="handler"&gt;
 *			&lt;bean class="日志处理接口的实现类" /&gt;
 *		&lt;/property&gt;
 *	&lt;/bean&gt;
 *	&lt;aop:config&gt;
 *		&lt;!-- 切面切入点 --&gt;
 *		&lt;aop:pointcut id="logPointCut" expression="@annotation(com.dart.framework.annotations.Log)"/&gt;
 *		
 *		&lt;aop:aspect ref="logAspect"&gt;
 *			&lt;!-- 执行方法前执行的切面方法 --&gt;
 *			&lt;aop:around pointcut-ref="logPointCut" method="saveLog" /&gt;
 *			&lt;!-- 异常后执行的切面方法 --&gt;
 *			&lt;aop:after-throwing pointcut-ref="logPointCut" method="throwLog" throwing="x" /&gt;
 *		&lt;/aop:aspect&gt;
 *	&lt;/aop:config&gt;
 * </pre>
 * 
 * @作者：杨浩泉
 * @日期：2016年9月28日
 */
public interface LogHandler {

	/**
	 * 执行方法前进行日志记录
	 * @param joinPoint 连接点
	 * @param methodName 方法名
	 * @param operate 操作
	 */
	void saveLog(ProceedingJoinPoint joinPoint, String methodName, String operate) throws LogException ;
	
	/**
	 * 代码抛异常后进行日志记录<br>
	 * <b>需要在方法上使用Log注解标识才进行拦截</b>
	 * @param joinPoint 连接点
	 * @param methodName 方法名
	 * @param operate 操作
	 */
	void thorwingLog(JoinPoint joinPoint, String methodName, Throwable ex, String operate) throws LogException ;
	
}
